package com.paydowncalc.app; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Random; import android.app.ActionBar; import android.app.Activity; import android.app.AlertDialog; import android.app.FragmentTransaction; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.graphics.Color; import android.graphics.Paint; import android.net.Uri; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.app.NavUtils; import android.support.v4.view.ViewPager; import android.text.Editable; import android.text.TextWatcher; import android.util.Log; import android.view.Gravity; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.view.ViewParent; import android.view.WindowManager; import android.widget.AdapterView; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; import android.widget.Spinner; import android.widget.SpinnerAdapter; import android.widget.TabHost; import android.widget.TableLayout; import android.widget.TextView; import android.widget.Toast; import org.achartengine.ChartFactory; import org.achartengine.chart.BarChart; import org.achartengine.chart.PointStyle; import org.achartengine.chart.TimeChart; import org.achartengine.model.CategorySeries; import org.achartengine.model.TimeSeries; import org.achartengine.model.XYMultipleSeriesDataset; import org.achartengine.model.XYSeries; import org.achartengine.renderer.SimpleSeriesRenderer; import org.achartengine.renderer.XYMultipleSeriesRenderer; import org.achartengine.renderer.XYSeriesRenderer; public class PayDownCalcMain extends FragmentActivity implements ActionBar.TabListener { /** * The {@link android.support.v4.view.PagerAdapter} that will provide * fragments for each of the sections. We use a * {@link android.support.v4.app.FragmentPagerAdapter} derivative, which * will keep every loaded fragment in memory. If this becomes too memory * intensive, it may be best to switch to a * {@link android.support.v4.app.FragmentStatePagerAdapter}. */ SectionsPagerAdapter mSectionsPagerAdapter; private static final int SERIES_NR = 3; /** * The {@link ViewPager} that will host the section contents. */ ViewPager mViewPager; public Mortgage mtg; public View mtgFragmentView; public View extraPayFragmentView; public View chartFragmentView; public DummySectionFragment chartFragment; public ViewGroup chartFragmentContainer; public IconAdapter listItems; public static final String PREFS_NAME = "PDC_Prefs"; public List<ItemWidget> listWidgets; public TextWatcher getTextWatcher() { return new TextWatcher() { public void afterTextChanged(Editable s) { showCalcButton(true); } public void beforeTextChanged(CharSequence s, int start, int count, int after) { } public void onTextChanged(CharSequence s, int start, int before, int count) { } }; } public OnItemSelectedListener getSpinnerWatcher() { return new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { showCalcButton(true); } public void onNothingSelected(AdapterView<?> parent) {} }; } public void showCalcButton(boolean show) { if(mtgFragmentView == null || extraPayFragmentView == null) { return; } int backdate = 0; TableLayout resultsTable = (TableLayout) mtgFragmentView.findViewById(R.id.resultsTable); Button calcButton = (Button) mtgFragmentView.findViewById(R.id.calcbutton); TextView backdatewarning =(TextView) mtgFragmentView.findViewById(R.id.backdatewarning); TextView backdatewarning2 =(TextView) extraPayFragmentView.findViewById(R.id.backdatewarning); if(show) { calcButton.setVisibility(View.VISIBLE); resultsTable.setVisibility(View.GONE); } else { calcButton.setVisibility(View.GONE); resultsTable.setVisibility(View.VISIBLE); Spinner spin= (Spinner) mtgFragmentView.findViewById(R.id.monthspinner); String startmonth = (String)spin.getSelectedItem(); spin= (Spinner) mtgFragmentView.findViewById(R.id.yearspinner); String startyear = (String)spin.getSelectedItem(); String dateformatted = startmonth + " " + startyear ; SimpleDateFormat sdf = new SimpleDateFormat("MMMM yyyy", Locale.US); Date startDate = new Date(); Calendar currentDate = Calendar.getInstance(); currentDate.setTime(startDate); try { startDate = sdf.parse(dateformatted); Log.v("startDate", "Extracted "+ sdf.format(startDate)); } catch(Exception ex) { Log.v("startDate", "Parse error!"); } currentDate.add(Calendar.MONTH, -2); Log.v("currentDate", "compare " + sdf.format(currentDate.getTime())); if(currentDate.getTime().after(startDate)) { Log.v("currentDate", sdf.format(currentDate.getTime()) + " is after " + sdf.format((startDate))); backdatewarning.setVisibility(View.VISIBLE); backdatewarning2.setVisibility(View.VISIBLE); } else { Log.v("currentDate", sdf.format(currentDate.getTime()) + " is before " + sdf.format((startDate) )); backdatewarning.setVisibility(View.GONE); backdatewarning2.setVisibility(View.GONE); } } resultsTable = (TableLayout) extraPayFragmentView.findViewById(R.id.resultsTable); if(show) { resultsTable.setVisibility(View.GONE); } else { resultsTable.setVisibility(View.VISIBLE); } if(chartFragmentView != null ) { LayoutInflater inflater = getLayoutInflater(); View newChartView = inflater.inflate(R.layout.invalidchart, (ViewGroup)chartFragmentView.getParent(), false); Button theCalcButton = (Button) newChartView.findViewById(R.id.calcbutton); theCalcButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { calcMortgage(); } }); ViewGroup parent = (ViewGroup) chartFragmentView.getParent(); int index = parent.indexOfChild(chartFragmentView); parent.removeView(chartFragmentView); parent.addView(newChartView, index); chartFragmentView = newChartView; //LayoutInflater inflater = getLayoutInflater(); //chartFragmentView = inflater.inflate(R.layout.invalidchart, (ViewGroup)chartFragmentView.getParent(), false); //chartFragmentView = ChartFactory.getBarChartView(chartFragmentView.getContext(), getBarDemoDataset(), renderer, BarChart.Type.DEFAULT); } } public void calcMortgage() { mtg = new Mortgage(); //traverse the list getting all values for(int i = 0; i<listItems.listWidgets.size(); i++ ) { if(listItems.listWidgets.get(i).isExtra) { ExtraPayment ePay = new ExtraPayment( listItems.listWidgets.get(i).value, listItems.listWidgets.get(i).startmonth, listItems.listWidgets.get(i).startyear, listItems.listWidgets.get(i).frequency ); mtg.extraPayments.add(ePay); } } calcMtg(); } public void calcMtg() { //TODO need to pull and error check the mtg values from the EditText! EditText editT = (EditText) mtgFragmentView.findViewById(R.id.origLoanEditText); mtg.originalloanamount = new BigDecimal(editT.getText().toString()); editT = (EditText) mtgFragmentView.findViewById(R.id.currentOwedEditText); mtg.amountstillowed = new BigDecimal(editT.getText().toString()); editT = (EditText) mtgFragmentView.findViewById(R.id.interestEditText); mtg.interestrate = Float.parseFloat(editT.getText().toString()); editT = (EditText) mtgFragmentView.findViewById(R.id.loanLengthEditText); mtg.loanlengthyears = Integer.parseInt(editT.getText().toString()); Spinner spin= (Spinner) mtgFragmentView.findViewById(R.id.monthspinner); mtg.startmonth = (String)spin.getSelectedItem(); spin= (Spinner) mtgFragmentView.findViewById(R.id.yearspinner); mtg.startyear = (String)spin.getSelectedItem(); Log.v("pdc", "here"); mtg.calculateMtg(); Log.v("pdc", "there"); mtg.amortize(); Log.v("pdc", "tthere"); if(mtgFragmentView != null) { TextView monthlyTVmtg = (TextView) mtgFragmentView.findViewById(R.id.monthlyamount); TextView totalPaidTVmtg = (TextView) mtgFragmentView.findViewById(R.id.totalpaidamount); TextView finalPayTVmtg = (TextView) mtgFragmentView.findViewById(R.id.payoffdate); TextView totalIntTVmtg = (TextView) mtgFragmentView.findViewById(R.id.totalinterestamount); TextView IntSavedTVmtg = (TextView) mtgFragmentView.findViewById(R.id.interestsavedamount); TextView timeSavedTVmtg = (TextView) mtgFragmentView.findViewById(R.id.timesavedamount); if(monthlyTVmtg != null) { Log.v("pdc", "a3tthere"); monthlyTVmtg.setText(mtg.getMonthlyPayment()); totalPaidTVmtg.setText(mtg.getTotalPaid()); finalPayTVmtg.setText(mtg.getFinalPayoffDate()); totalIntTVmtg.setText(mtg.getTotalInterestPaid()); IntSavedTVmtg.setText(mtg.getTotalInterestSaved()); timeSavedTVmtg.setText(mtg.getTimeSaved()); } } else { Log.w("pdc", "mtgFragmentView is null"); } if(extraPayFragmentView != null) { TextView monthlyTVextra = (TextView) extraPayFragmentView.findViewById(R.id.monthlyamount); TextView totalPaidTVextra = (TextView) extraPayFragmentView.findViewById(R.id.totalpaidamount); TextView finalPayTVextra = (TextView) extraPayFragmentView.findViewById(R.id.payoffdate); TextView totalIntTVextra = (TextView) extraPayFragmentView.findViewById(R.id.totalinterestamount); TextView IntSavedTVextra = (TextView) extraPayFragmentView.findViewById(R.id.interestsavedamount); TextView timeSavedTVextra = (TextView) extraPayFragmentView.findViewById(R.id.timesavedamount); if(monthlyTVextra != null) { Log.v("pdc", "3tthere"); monthlyTVextra.setText(mtg.getMonthlyPayment()); totalPaidTVextra.setText(mtg.getTotalPaid()); finalPayTVextra.setText(mtg.getFinalPayoffDate()); totalIntTVextra.setText(mtg.getTotalInterestPaid()); IntSavedTVextra.setText(mtg.getTotalInterestSaved()); timeSavedTVextra.setText(mtg.getTimeSaved()); } } else { Log.w("pdc", "extraPayFragmentView is null"); } showCalcButton(false); //Toast.makeText(getBaseContext(), "Chart Updated.", Toast.LENGTH_SHORT).show(); Log.v("pdc", "reload chart fragment?"); if(chartFragmentView != null) { Log.w("pdc", "reloading chart fragment"); XYMultipleSeriesRenderer renderer = getBarDemoRenderer(); setChartSettings(renderer); View newChartView = ChartFactory.getBarChartView(chartFragmentView.getContext(), getBarDemoDataset(), renderer, BarChart.Type.DEFAULT); ViewGroup parent = (ViewGroup) chartFragmentView.getParent(); int index = parent.indexOfChild(chartFragmentView); parent.removeView(chartFragmentView); parent.addView(newChartView, index); chartFragmentView = newChartView; // int tabIndex = getCurrentPageIndex(mViewPager); // Log.v("tabIndex", tabIndex + ""); // Log.v("currentItem", mViewPager.getCurrentItem() + ""); // mViewPager.setCurrentItem(mViewPager.getCurrentItem()); //mViewPager.setCurrentItem(tabIndex); //final ActionBar actionBar = getActionBar(); //actionBar.selectTab(); //chartFragment. } else { Log.w("pdc", "chart fragment is null"); } } public static String[] getMonths() { return new String[] { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"}; } public static String[] getYears() { String [] years = new String[50]; for(int i=0;i<years.length; i++) { years[i] = (i + 1970) + ""; years[i] = years[i].trim(); } return years; } public static String[] getExtraTypes() { return new String[] { "Monthly", "Annual", "One-time"}; } public static String[] getLoanLengths() { String [] years = new String[100]; for(int i=1;i<years.length; i++) { years[i] = (i) + " Years"; years[i] = years[i].trim(); } return years; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.paydowncalc_main); // Set up the action bar. final ActionBar actionBar = getActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); // Create the adapter that will return a fragment for each of the three // primary sections of the app. mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); // Set up the ViewPager with the sections adapter. mViewPager = (ViewPager) findViewById(R.id.pager); mViewPager.setAdapter(mSectionsPagerAdapter); mViewPager.setOffscreenPageLimit(3); // When swiping between different sections, select the corresponding // tab. We can also use ActionBar.Tab#select() to do this if we have // a reference to the Tab. mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { actionBar.setSelectedNavigationItem(position); } }); // For each of the sections in the app, add a tab to the action bar. for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) { // Create a tab with text corresponding to the page title defined by // the adapter. Also specify this Activity object, which implements // the TabListener interface, as the callback (listener) for when // this tab is selected. actionBar.addTab( actionBar.newTab() .setText(mSectionsPagerAdapter.getPageTitle(i)) .setTabListener(this)); } mtg = new Mortgage(); listWidgets = new ArrayList<ItemWidget>(); listItems = new IconAdapter(this, listWidgets); } public XYMultipleSeriesRenderer getBarDemoRenderer() { XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer(); renderer.setAxisTitleTextSize(16); renderer.setChartTitleTextSize(20); renderer.setLabelsTextSize(15); renderer.setLegendTextSize(20); renderer.setMargins(new int[]{20, 30, 15, 0}); renderer.clearXTextLabels(); renderer.setXLabelsColor(Color.BLACK); //renderer.setYLabelsColor(Color.MAGENTA, 0); renderer.setLabelsColor(Color.BLACK); renderer.setYLabelsAlign(Paint.Align.LEFT, 0); renderer.setShowGridY(true); renderer.setYLabelsColor(0, Color.BLACK); renderer.setYTitle("Amount"); renderer.setZoomEnabled(false, false); renderer.setXLabels(0); renderer.addXTextLabel(1, "Extra Payments"); renderer.addXTextLabel(2, "No Extra Payments"); renderer.setApplyBackgroundColor(true); renderer.setBackgroundColor(Color.WHITE); renderer.setMarginsColor(Color.WHITE); SimpleSeriesRenderer red = new SimpleSeriesRenderer(); SimpleSeriesRenderer orange = new SimpleSeriesRenderer(); SimpleSeriesRenderer blue = new SimpleSeriesRenderer(); blue.setColor(Color.BLUE); red.setColor(Color.RED); orange.setColor(Color.parseColor("#F87217")); renderer.addSeriesRenderer(blue); renderer.addSeriesRenderer(red); renderer.addSeriesRenderer(orange); return renderer; } public void setChartSettings(XYMultipleSeriesRenderer renderer) { renderer.setChartTitle("Principal / Interest / Savings"); //renderer.setXTitle("x values"); //renderer.setYTitle("y values"); renderer.setXAxisMin(0.5); renderer.setXAxisMax(2.5); renderer.setYAxisMin(0); if(mtg == null) { renderer.setYAxisMax(0); } else { double maxvalue = mtg.originalloanamount.doubleValue(); if(mtg.interestsaved != null) { maxvalue = mtg.runningtotalinterest.add(mtg.interestsaved).doubleValue(); } if(maxvalue < mtg.originalloanamount.doubleValue()) { maxvalue = mtg.originalloanamount.doubleValue(); } renderer.setYAxisMax(maxvalue); } renderer.setBarWidth(50); renderer.setBarSpacing(10); } public XYMultipleSeriesDataset getBarDemoDataset() { XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset(); CategorySeries seriesPrincipal = new CategorySeries("Principal"); CategorySeries seriesInterest = new CategorySeries("Interest"); CategorySeries seriesSavings = new CategorySeries("Savings"); if(mtg == null) { Log.w("getBarDemoDataset", "mtg is null"); } if(mtg.runningtotalinterest == null) { Log.w("getBarDemoDataset", "runningtotalinterest is null"); } if(mtg.interestsaved == null) { Log.w("getBarDemoDataset", "interestsaved is null"); } if(mtg == null || mtg.runningtotalprincipal == null || mtg.runningtotalinterest == null || mtg.interestsaved == null) { seriesPrincipal.add(0); seriesPrincipal.add(0); seriesInterest.add(0); seriesInterest.add(0); seriesSavings.add(0); seriesSavings.add(0); } else { if(listItems.listWidgets.size() == 0) { seriesPrincipal.add(0); seriesInterest.add(0); seriesSavings.add(0); } else { seriesPrincipal.add(mtg.runningtotalprincipal.doubleValue()); seriesInterest.add(mtg.runningtotalinterest.doubleValue()); seriesSavings.add(mtg.interestsaved.doubleValue()); } seriesPrincipal.add(mtg.runningtotalprincipal.doubleValue()); seriesInterest.add(mtg.runningtotalinterest.add(mtg.interestsaved).doubleValue()); seriesSavings.add(0); } dataset.addSeries(seriesPrincipal.toXYSeries()); dataset.addSeries(seriesInterest.toXYSeries()); dataset.addSeries(seriesSavings.toXYSeries()); return dataset; /* for (int i = 0; i < SERIES_NR; i++) { CategorySeries series = new CategorySeries("Demo series " + (i + 1)); for (int k = 0; k < nr; k++) { series.add(100 + r.nextInt() % 100); } dataset.addSeries(series.toXYSeries()); } return dataset; */ } public void message_dialog_yes_no (Activity activity, String msg, DialogInterface.OnClickListener yesListener) { AlertDialog.Builder builder = new AlertDialog.Builder(activity); builder.setMessage(msg) .setCancelable(false) .setPositiveButton("Yes", yesListener) .setNegativeButton("No", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); }}) .show(); } @Override public boolean onOptionsItemSelected(MenuItem item) { SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); DialogInterface.OnClickListener yesListener; switch (item.getItemId()) { case R.id.action_save: if(mtgFragmentView != null) { Spinner spin; EditText editT; SharedPreferences.Editor editor = settings.edit(); editT = (EditText) mtgFragmentView.findViewById(R.id.origLoanEditText); editor.putString("origLoanEditText", editT.getText().toString()); editT = (EditText) mtgFragmentView.findViewById(R.id.currentOwedEditText); editor.putString("currentOwedEditText", editT.getText().toString()); editT = (EditText) mtgFragmentView.findViewById(R.id.interestEditText); editor.putString("interestEditText", editT.getText().toString()); editT = (EditText) mtgFragmentView.findViewById(R.id.loanLengthEditText); editor.putString("loanLengthEditText", editT.getText().toString()); spin= (Spinner) mtgFragmentView.findViewById(R.id.monthspinner); editor.putString("monthspinner", (String)spin.getSelectedItem()); spin= (Spinner) mtgFragmentView.findViewById(R.id.yearspinner); editor.putString("yearspinner", (String)spin.getSelectedItem()); //traverse the list getting all values int listSize = listItems.listWidgets.size(); editor.putInt("listSize", listSize); for(int i = 0; i<listSize; i++ ) { editor.putString("listvalue"+i, listItems.listWidgets.get(i).value); editor.putString("liststartmonth"+i, listItems.listWidgets.get(i).startmonth); editor.putInt("liststartyear"+i, listItems.listWidgets.get(i).startyear); editor.putString("listfrequency"+i, listItems.listWidgets.get(i).frequency); } editor.commit(); Toast.makeText(this, "Saved.", Toast.LENGTH_SHORT) .show(); } break; case R.id.action_load: yesListener = new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); Spinner tempSpinner; ArrayAdapter<String> tempAdapter; EditText editT; String[] months = getMonths(); String [] years = getYears(); String [] extraTypes = getExtraTypes(); String [] loanYears = getLoanLengths(); Calendar tempCal = Calendar.getInstance(); String listvalue, liststartmonth, listfrequency; int liststartyear; if(extraPayFragmentView != null) { //Spinner tempSpinner = (Spinner)rootView.findViewById(R.id.monthspinner); ListView extraPayList = (ListView)extraPayFragmentView.findViewById(R.id.extraPayList); //traverse the list getting all values int listSize = settings.getInt("listSize", 0); for(int i = 0; i<listSize; i++ ) { listvalue = settings.getString("listvalue"+i, ""); liststartmonth = settings.getString("liststartmonth"+i, ""); liststartyear = settings.getInt("liststartyear"+i, 0); listfrequency = settings.getString("listfrequency"+i, ""); addExtraPayment(listfrequency, liststartmonth, liststartyear, listvalue, extraPayList); } } if(mtgFragmentView != null) { tempSpinner = (Spinner)mtgFragmentView.findViewById(R.id.monthspinner); tempAdapter = (ArrayAdapter<String>)tempSpinner.getAdapter(); tempSpinner.setSelection(tempAdapter.getPosition(settings.getString("monthspinner", months[tempCal.get(Calendar.MONTH)]))); tempSpinner = (Spinner)mtgFragmentView.findViewById(R.id.yearspinner); tempAdapter = (ArrayAdapter<String>)tempSpinner.getAdapter(); tempSpinner.setSelection(tempAdapter.getPosition(settings.getString("yearspinner", Integer.toString(tempCal.get(Calendar.YEAR))))); editT = (EditText)mtgFragmentView.findViewById(R.id.origLoanEditText); editT.setText(settings.getString("origLoanEditText", "100000.00")); editT = (EditText)mtgFragmentView.findViewById(R.id.currentOwedEditText); editT.setText(settings.getString("currentOwedEditText", "100000.00")); editT = (EditText)mtgFragmentView.findViewById(R.id.interestEditText); editT.setText(settings.getString("interestEditText", "4.15")); editT = (EditText)mtgFragmentView.findViewById(R.id.loanLengthEditText); editT.setText(settings.getString("loanLengthEditText", "30")); } Toast.makeText(getBaseContext(), "Loaded.", Toast.LENGTH_SHORT) .show(); calcMortgage(); } }; message_dialog_yes_no(this, "Abandon changes and load saved?" , yesListener); break; case R.id.action_about: yesListener = new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://DanNagle.com/Amazon")); startActivity(browserIntent); } }; message_dialog_yes_no(this, "PayDownCalc.com is (c) Dan Nagle. \n\nYou can shop Amazon via DanNagle.com/Amazon to support this app for free. Launch Browser?" , yesListener); Toast.makeText(this, "Copyright Dan Nagle", Toast.LENGTH_SHORT) .show(); break; default: break; } return true; } public void addExtraPayment(String frequency, String startmonth, int startyear, String amount, final ListView extraPayList) { ExtraPayment newExtra = new ExtraPayment(amount, startmonth, startyear, frequency); ItemWidget itemWidget = new ItemWidget(frequency, startmonth, amount, startyear, true); listWidgets.add(itemWidget); listItems = new IconAdapter(getBaseContext(), listWidgets); extraPayList.setAdapter(listItems); listItems.notifyDataSetChanged(); extraPayList.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, final View view, int position, long id) { TextView theItem = (TextView) view.findViewById(R.id.label); final ItemWidget itemWidget = (ItemWidget) theItem.getTag(); final int finalPosition = position; view.animate().setDuration(500).alpha(0) .withEndAction(new Runnable() { @Override public void run() { Log.v("removing", "size is " + listWidgets.size()); listWidgets.remove(itemWidget); listItems = new IconAdapter(getBaseContext(), listWidgets); extraPayList.setAdapter(listItems); Log.v("removing", "size is " + listWidgets.size()); listItems.notifyDataSetChanged(); view.setAlpha(1); calcMortgage(); } }); } }); } public void getExtraPayListClickListener () { // sdsd } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.pay_down_calc_main, menu); return true; } @Override public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { // When the given tab is selected, switch to the corresponding page in // the ViewPager. mViewPager.setCurrentItem(tab.getPosition()); } @Override public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { } @Override public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { } /** * A {@link FragmentPagerAdapter} that returns a fragment corresponding to * one of the sections/tabs/pages. */ public class SectionsPagerAdapter extends FragmentPagerAdapter { public SectionsPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { // getItem is called to instantiate the fragment for the given page. // Return a DummySectionFragment (defined as a static inner class // below) with the page number as its lone argument. Fragment fragment = new DummySectionFragment(); Bundle args = new Bundle(); args.putInt(DummySectionFragment.ARG_SECTION_NUMBER, position + 1); fragment.setArguments(args); Log.v("getItem", "Am I fetching a fragment?"); if(position == 2) { //chartFragment = (DummySectionFragment) fragment; } return fragment; } @Override public int getCount() { // Show 3 total pages. return 3; } @Override public CharSequence getPageTitle(int position) { Locale l = Locale.getDefault(); switch (position) { case 0: return getString(R.string.title_section1).toUpperCase(l); case 1: return getString(R.string.title_section2).toUpperCase(l); case 2: return getString(R.string.title_section3).toUpperCase(l); } return null; } } /** * A dummy fragment representing a section of the app, but that simply * displays dummy text. */ public static class DummySectionFragment extends Fragment { /** * The fragment argument representing the section number for this * fragment. */ public static final String ARG_SECTION_NUMBER = "section_number"; private class StableArrayAdapter extends ArrayAdapter<String> { HashMap<String, Integer> mIdMap = new HashMap<String, Integer>(); public StableArrayAdapter(Context context, int textViewResourceId, List<String> objects) { super(context, textViewResourceId, objects); for (int i = 0; i < objects.size(); ++i) { mIdMap.put(objects.get(i), i); } } @Override public long getItemId(int position) { String item = getItem(position); return mIdMap.get(item); } @Override public boolean hasStableIds() { return true; } } public DummySectionFragment() { } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { String[] months = getMonths(); String [] years = getYears(); String [] extraTypes = getExtraTypes(); String [] loanYears = getLoanLengths(); Log.v("onCreateView", "Passed Arg is " + Integer.toString(getArguments().getInt(ARG_SECTION_NUMBER))); if((getArguments().getInt(ARG_SECTION_NUMBER)) == 3) { Log.v("ARG_SECTION_NUMBER", "3:" ); } Calendar tempCal = Calendar.getInstance(); Log.v("pdc", "monthtest:" +tempCal.get(Calendar.MONTH)); // Log.v("pdc", "monthtest2:" + months[tempCal.get(Calendar.MONTH) -1]); Log.v("pdc", "monthtest3:" + months[tempCal.get(Calendar.MONTH)]); final Spinner monthSpinner, yearSpinner, typeSpinner; ArrayAdapter<String> monthSpinnerAdapter, yearSpinnerAdapter, typeSpinnerAdapter; final EditText amountEdit; View rootView = inflater.inflate(R.layout.fragment_pay_down_calc_main_dummy, container, false); TextView dummyTextView = (TextView) rootView.findViewById(R.id.section_label); dummyTextView.setText(Integer.toString(getArguments().getInt(ARG_SECTION_NUMBER))); monthSpinnerAdapter = new ArrayAdapter<String>(container.getContext(), android.R.layout.simple_spinner_dropdown_item, months); yearSpinnerAdapter = new ArrayAdapter<String>(container.getContext(), android.R.layout.simple_spinner_dropdown_item, years); typeSpinnerAdapter = new ArrayAdapter<String>(container.getContext(), android.R.layout.simple_spinner_dropdown_item, extraTypes); Log.v("onCreateView", "Passed Arg is " + Integer.toString(getArguments().getInt(ARG_SECTION_NUMBER))); PayDownCalcMain PDCM = (PayDownCalcMain)getActivity(); SharedPreferences settings = PDCM.getSharedPreferences(PREFS_NAME, 0); switch((getArguments().getInt(ARG_SECTION_NUMBER))) { case 0: break; case 1: rootView = inflater.inflate(R.layout.mortgageform, container, false); monthSpinner = (Spinner)rootView.findViewById(R.id.monthspinner); yearSpinner = (Spinner)rootView.findViewById(R.id.yearspinner); //typeSpinner = (Spinner)rootView.findViewById(R.id.extratype); monthSpinner.setAdapter(monthSpinnerAdapter); yearSpinner.setAdapter(yearSpinnerAdapter); monthSpinner.setSelection(monthSpinnerAdapter.getPosition(months[tempCal.get(Calendar.MONTH)])); yearSpinner.setSelection(yearSpinnerAdapter.getPosition(Integer.toString(tempCal.get(Calendar.YEAR)))); EditText editT = (EditText)rootView.findViewById(R.id.origLoanEditText); editT.setText(settings.getString("origLoanEditText", "100000.00")); editT.addTextChangedListener(PDCM.getTextWatcher()); editT = (EditText)rootView.findViewById(R.id.currentOwedEditText); editT.setText(settings.getString("currentOwedEditText", "100000.00")); editT.addTextChangedListener(PDCM.getTextWatcher()); editT = (EditText)rootView.findViewById(R.id.interestEditText); editT.setText(settings.getString("interestEditText", "4.15")); editT.addTextChangedListener(PDCM.getTextWatcher()); editT = (EditText)rootView.findViewById(R.id.loanLengthEditText); editT.setText(settings.getString("loanLengthEditText", "30")); editT.addTextChangedListener(PDCM.getTextWatcher()); monthSpinner.setOnItemSelectedListener(PDCM.getSpinnerWatcher()); yearSpinner.setOnItemSelectedListener(PDCM.getSpinnerWatcher()); monthSpinner.setSelection(monthSpinnerAdapter.getPosition(settings.getString("monthspinner", months[tempCal.get(Calendar.MONTH)]))); yearSpinner.setSelection(yearSpinnerAdapter.getPosition(settings.getString("yearspinner", Integer.toString(tempCal.get(Calendar.YEAR))))); Button calcButton = (Button) rootView.findViewById(R.id.calcbutton); calcButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { PayDownCalcMain PDCM = (PayDownCalcMain)getActivity(); PDCM.calcMortgage(); } }); PDCM.mtgFragmentView = rootView; if(PDCM.mtg == null) { PDCM.showCalcButton(true); } //PDCM.calcMortgage(); PDCM.getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); break; case 2: rootView = inflater.inflate(R.layout.extrapaymentform, container, false); monthSpinner = (Spinner)rootView.findViewById(R.id.monthspinner); yearSpinner = (Spinner)rootView.findViewById(R.id.yearspinner); typeSpinner = (Spinner)rootView.findViewById(R.id.extratype); amountEdit = (EditText)rootView.findViewById(R.id.extraPayAmountEditText); /* Begin ListView Setup */ final ListView extraPayList = (ListView)rootView.findViewById(R.id.extraPayList); extraPayList.setAdapter(PDCM.listItems); /*End ListView setup */ monthSpinner.setAdapter(monthSpinnerAdapter); yearSpinner.setAdapter(yearSpinnerAdapter); typeSpinner.setAdapter(typeSpinnerAdapter); monthSpinner.setSelection(monthSpinnerAdapter.getPosition( months[tempCal.get(Calendar.MONTH)])); yearSpinner.setSelection(yearSpinnerAdapter.getPosition(Integer.toString(tempCal.get(Calendar.YEAR)))); String listvalue, liststartmonth, listfrequency; int liststartyear; //traverse the list getting all values int listSize = settings.getInt("listSize", 0); for(int i = 0; i<listSize; i++ ) { listvalue = settings.getString("listvalue"+i, ""); liststartmonth = settings.getString("liststartmonth"+i, ""); liststartyear = settings.getInt("liststartyear"+i, 0); listfrequency = settings.getString("listfrequency"+i, ""); PDCM.addExtraPayment(listfrequency, liststartmonth, liststartyear, listvalue, extraPayList); } Button addButton = (Button)rootView.findViewById(R.id.addExtraPayButton); addButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Log.w("onClick", "Add extra payment clicked"); String frequency = typeSpinner.getSelectedItem().toString(); String startmonth = monthSpinner.getSelectedItem().toString(); int startyear = Integer.parseInt(yearSpinner.getSelectedItem().toString()); String amount = amountEdit.getText().toString(); Log.w("extrapay!", amount + " " + frequency + ", " + startmonth + ", " + startyear); final PayDownCalcMain PDCM = (PayDownCalcMain) getActivity(); PDCM.addExtraPayment(frequency,startmonth,startyear,amount, extraPayList); PDCM.calcMortgage(); //PDCM.showCalcButton(true); } }); PDCM.extraPayFragmentView = rootView; //Spinner tempSpinner = (Spinner)rootView.findViewById(R.id.monthspinner); PDCM.showCalcButton(true); //typeSpinner.setSelection(yearSpinnerAdapter.getPosition("Monthly")); break; case 3: XYMultipleSeriesRenderer renderer = PDCM.getBarDemoRenderer(); PDCM.setChartSettings(renderer); rootView = ChartFactory.getBarChartView(container.getContext(), PDCM.getBarDemoDataset(), renderer, BarChart.Type.DEFAULT); PDCM.chartFragmentContainer = container; PDCM.chartFragmentView = rootView; //Intent intent = ChartFactory.getBarChartIntent(container.getContext(), getBarDemoDataset(), renderer, BarChart.Type.DEFAULT); //startActivity(intent); default : break; } return rootView; } } }